--[[
NetFlow - OpenWRT 网络流量管理系统
优先级设置模型

本文件定义了优先级设置页面的配置模型，
提供应用程序优先级和策略配置。
]]--

local m, s, o

-- 创建配置映射
m = Map("netflow", "NetFlow 优先级设置",
    "配置不同应用程序的优先级和策略。")

-- 创建应用优先级部分
s = m:section(TypedSection, "app_priority", "应用程序优先级")
s.template = "cbi/tblsection"
s.anonymous = true
s.addremove = true
s.sortable = true

-- 应用名称
o = s:option(Value, "name", "应用名称")
o.rmempty = false
o.description = "输入应用程序的名称"

-- 应用类型
o = s:option(ListValue, "app_class", "应用类型")
o:value("1", "视频会议")
o:value("2", "语音通话")
o:value("3", "在线游戏")
o:value("4", "视频流媒体")
o:value("5", "音频流媒体")
o:value("6", "网页浏览")
o:value("7", "文件下载")
o:value("8", "P2P下载")
o:value("9", "远程登录")
o:value("10", "邮件")
o:value("11", "系统更新")
o:value("12", "其他")
o.default = "12"
o.description = "选择应用程序的类型"

-- 优先级
o = s:option(ListValue, "priority", "优先级")
o:value("1", "最高")
o:value("2", "高")
o:value("3", "普通")
o:value("4", "低")
o.default = "3"
o.description = "设置应用程序的优先级"

-- 带宽保证
o = s:option(Value, "min_bw", "带宽保证 (%)")
o.datatype = "range(0, 100)"
o.default = "0"
o.description = "设置应用程序的最小保证带宽百分比"

-- 带宽上限
o = s:option(Value, "max_bw", "带宽上限 (%)")
o.datatype = "range(0, 100)"
o.default = "100"
o.description = "设置应用程序的最大允许带宽百分比"

-- 创建用户优先级部分
s = m:section(TypedSection, "user_priority", "用户优先级")
s.template = "cbi/tblsection"
s.anonymous = true
s.addremove = true
s.sortable = true

-- 用户名/设备名
o = s:option(Value, "name", "用户/设备名")
o.rmempty = false
o.description = "输入用户或设备的名称"

-- MAC地址
o = s:option(Value, "mac", "MAC地址")
o.datatype = "macaddr"
o.rmempty = false
o.description = "输入设备的MAC地址"

-- 优先级
o = s:option(ListValue, "priority", "优先级")
o:value("1", "最高")
o:value("2", "高")
o:value("3", "普通")
o:value("4", "低")
o.default = "3"
o.description = "设置用户或设备的优先级"

-- 创建时间优先级部分
s = m:section(TypedSection, "time_priority", "时间优先级")
s.template = "cbi/tblsection"
s.anonymous = true
s.addremove = true
s.sortable = true

-- 时间段名称
o = s:option(Value, "name", "时间段名称")
o.rmempty = false
o.description = "输入时间段的名称"

-- 星期
o = s:option(MultiValue, "days", "星期")
o:value("mon", "星期一")
o:value("tue", "星期二")
o:value("wed", "星期三")
o:value("thu", "星期四")
o:value("fri", "星期五")
o:value("sat", "星期六")
o:value("sun", "星期日")
o.description = "选择适用的星期"

-- 开始时间
o = s:option(Value, "start_time", "开始时间")
o.datatype = "string"
o.default = "09:00"
o.description = "设置时间段的开始时间 (HH:MM)"

-- 结束时间
o = s:option(Value, "end_time", "结束时间")
o.datatype = "string"
o.default = "18:00"
o.description = "设置时间段的结束时间 (HH:MM)"

-- 应用类型
o = s:option(MultiValue, "app_classes", "应用类型")
o:value("1", "视频会议")
o:value("2", "语音通话")
o:value("3", "在线游戏")
o:value("4", "视频流媒体")
o:value("5", "音频流媒体")
o:value("6", "网页浏览")
o:value("7", "文件下载")
o:value("8", "P2P下载")
o.description = "选择在此时间段内优先的应用类型"

-- 优先级调整
o = s:option(ListValue, "priority_adjustment", "优先级调整")
o:value("1", "提高")
o:value("0", "不变")
o:value("-1", "降低")
o.default = "1"
o.description = "设置此时间段内应用的优先级调整方式"

return m
